<?php

namespace Transaccion\Controller\Service;

use Zend\Db\Adapter\Adapter;
use Componentes\Controller\UtilsArrayController;
use Transaccion\Model\Entity\Semestre;
use Transaccion\Controller\Service\GenericService;
use Transaccion\Model\Dao\SemestreDAO;

//SERVICIO
class SemestreService extends GenericService {

    /**
     * @var Zend\Db\Adapter\Adapter 
     */
    private $dbAdapter;
    private static $semestreService;

    /**
     * @param \Zend\Db\Adapter\Adapter $dbAdapter
     */
    private function __construct(Adapter $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    public static function getInstance($adapter) {
        if (self::$semestreService == null) {
            self::$semestreService = new SemestreService($adapter);
        }
        return self::$semestreService;
    }

    public function getSemestreDao() {
        return SemestreDAO::getInstance($this->dbAdapter);
    }

    /**
     * @param type $id
     * @return type
     */
    public function getRegistro($id) {
        $data = null;
        $success = false;
        $semestre = $this->obtenerSemestreSegunId($id);
        if ($semestre->getId() != null) {
            $data[0] = $semestre->objectToArray();
            $success = true;
        }
        return UtilsArrayController::organizarOutput($success, $data, null);
    }

    public function obtenerSemestreSegunId($id) {
        $registros = $this->getSemestreDao()->getRegistro($id);
        $data = UtilsArrayController::llenarData($registros);
        $semestre = new Semestre($data[0]);
        $semestre->setId($data[0]['id']);
        $semestre->setOrganizacionSeccion($data[0]['id_organizacion_seccion']);
        $semestre->setCondicionMateria($data[0]['id_condicion_materia']);
        $semestre->setDatosAcademicos($data[0]['id_datos_academicos']);
        return $semestre;
    }

    public function deleteSemestreSegunId($id) {
        $result = $this->getSemestreDao()->eliminarSemestreSegunId($id);
        return $result;
    }

    /**
     * @param type $data
     * @return type
     */
    public function createRegistro($organizacionSeccion, $condicionMateria, $datosAcademicos) {
        // Guardar el registro
        $semestre = new Semestre;
        $semestre->setId(0);
        $semestre->setOrganizacionSeccion($organizacionSeccion);
        $semestre->setCondicionMateria($condicionMateria);
        $semestre->setDatosAcademicos($datosAcademicos);
        $data = $semestre->objectToArrayBD();
        $registros = $this->getSemestreDao()->createRegistro($data);
        return $registros;
    }

//-----------------------------------
}
